package com.UnionPayCenter.account.service;

import com.UnionPayCenter.account.entity.Account;
import com.UnionPayCenter.account.entity.dto.ChargeDTO;
import com.UnionPayCenter.account.entity.dto.PayDTO;
import com.UnionPayCenter.account.enums.AccountTypeEnum;
import com.UnionPayCenter.account.enums.ChargeStatusEnum;
import com.UnionPayCenter.entity.dto.ChargeResponse;

/**
 * 充值支付
 */
public interface ChargePayService {

    /**
     * 充值
     *
     * @param chargeDTO 充值信息
     * @return 银联充值响应
     */
    ChargeResponse charge(ChargeDTO chargeDTO);

    /**
     * 支付,仅用于余额支付
     *
     * @param payDTO 支付信息
     */
    void pay(PayDTO payDTO);

    /**
     * 更新充值流水状态
     *
     * @param sn    流水序列号
     * @param state 状态
     */
    void updateState(String sn, ChargeStatusEnum state);


    void postRegistRewards(Integer shopId, Integer userId);

    /**
     * 送现金
     *
     * @param chargeDTO   充值请求
     * @param amount      金额
     * @param accountType 账户类型
     * @return 充值响应
     */
    ChargeResponse chargeRewardsCash(ChargeDTO chargeDTO, Integer amount, AccountTypeEnum accountType);
    
    /**
     * 会员导入赠送储值余额
     * @param chargeAccount 待充值账户
     * @param amount 金额
     */
    void userImportCharge(Account chargeAccount, Integer amount);
}
